存满数据的硬盘是不是比空硬盘重?
平时就喜欢听喜马拉雅的《卓老板聊科技》,作为路上打发时间的利器,卓克的这个节目强调科学思维,其内容深度和广度确实让我大开眼界。昨天偶尔听到一集,关于“存满数据的硬盘是不是比空硬盘重?”的问题,角度十分刁钻,让我也开了脑洞。不过,其中关于SSD固态硬盘的存储部分有些许错误,虽然瑕不掩瑜而且结论正确,我还是想要澄清部分对SSD原理广泛的误解。
和卓克一样,我也将硬盘分为传统磁介质硬盘和固态硬盘两种,两种硬盘有不同的答案。和他不同的是,我希望从空硬盘什么样,存满数据的硬盘什么样的角度来推导出结论。
空硬盘什么样?
大家买回去的硬盘上面什么也没有,还需要重新分区等等操作,是不是硬盘上面就空空如也,什么也没有呢?其实并不是。
磁介质机械硬盘出厂时做过低级格式化,拿到用户的手上时已经被写入柱面、磁道、扇区等等信息,在没有内容的数据区,都被磁化成0的内容。所以空机械硬盘是绝大部分为0内容,很小部分为数据(假设0,1参半)。
SSD存储介质采取NAND Flash。为了简化起见,我们只讨论SLC。MLC/TCL/QLC也类似,并不影响结果。空的SSD出厂前已经被写入原始的FTL映射表,空闲块也已经被预擦除(不是必须,结果一样)。和卓克认为的不一样,被擦除后是全1,也就是说空SSD是绝大部分是1,很小部分是数据(也假设0,1参半)。
存满数据后有什么变化?
为了简化起见,我们假设存满的数据也都是0,1参半。那么存满数据后硬盘发生了什么变化呢?
磁介质硬盘数据是通过调整磁介质磁极方向来存储的。卓克的比喻十分形象,这里借用一下:机械硬盘是一个筐子,磁介质是里面放的很多香蕉。0是香蕉把朝北,1是香蕉把朝南。存满数据就相当于,原来香蕉把都朝北,现在一半朝北一半朝南。请问筐子重量会不会变化呢?当然不会!
SSD的NAND Flash存储,卓克认为是测量被囚禁在浮动栅(Float Gate)里面的电子的数量,大于100就是1,小于就是0。因为电子有质量,因为空的SSD以前都是0,现在被囚禁了很多电子,导致0,1参半,所以会重一点点。但是我们前面提到,空SSD实际上绝大部分是1,存满数据实际上是0变多了,那是不是意味着存满数据,SSD变轻了呢?
实际上,是会重一点。卓克犯了两个错误,负负的正,结论反倒是正确的。实际上存0比存1重,所以SSD会变重点。那么为什么存0反倒比存1重呢?这要从NAND Flash的存储原理说起。
闪存的工作原理
闪存的基本原理在1980年代之后基本就没有变化过。它的构成和场效应管(MOSFET)十分类似:
它由:源极(Source)、漏极(Drain)、浮动栅(Float Gate)和控制栅(Control Gate)组成。相对场效应管的单栅极结构,闪存是双栅极结构。浮动栅是由氮化物夹在二氧化硅材料(Insulator)之间构成。
我们的写操作(Program)是这样:
在控制栅加正电压,将电子(带负电)吸入浮动栅。在此后,由于浮动栅上下的二氧化硅材料并不导电,这些电子被囚禁(Trap)在浮动栅之中,出不去了。这样无论今后控制栅电压有否,这个状态都会保持下去,所以闪存可以掉电保存数据。注意写操作完毕后,该闪存单元存储的是0,后面我们将会介绍为什么。
我们的擦除操作(Erase)刚好相反:
在源极加正电压利用浮空栅与漏极之间的隧道效应,将注入到浮空栅的负电荷吸引到源极,排空浮动栅的电子。这时读取的状态是1。
那为什么有电子是0,没电子是1呢?以为读取的时候,需要给控制栅加一个低的读取电压,对于被Program过的闪存单元来说,被囚禁的电子可以抵消该读取电压,造成源极和漏极之间是处于被关闭的状态:
也就是说通过向控制栅加读取电压,判断漏极-源极之间是否处于导通状态来读取闪存单元的状态,如果被Program过的,就是处于关闭OFF状态,为0;而被Erase过的,就是处于导通状态ON,为1。
总结一下,就是浮动栅(Float Gate)里面没有电子,就是1;如果有电子,就是0。因为0有少许电子,比没有电子的1的状态要重一些。空的SSD大部分是1,没有电子;写满后0状态变多了,有了更多的电子,所以重一些。
结论
存满数据后,机械硬盘只有磁级变化,质量不变;而SSD因为锁住了更多的电子(但要记住,是0变多了,而不是1),所以变重了,尽管只有几乎可以忽略的一点点!
生活中真是充满了各种有趣的意想不到的知识!